﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QLNhaSach.DAO;
using QLNhaSach.BUS.DTO;
using QLNhaSach.BUS;
using System.IO;

namespace QLNhaSach.GUI.NhanVienBanSach
{
    public partial class LapHoaDonBanHang : Form
    {
        public int maNV;
        NhanVienDTO nv = new NhanVienDTO();
        HoaDonDTO hd = new HoaDonDTO();
        ChiTietHoaDonDTO cthd = new ChiTietHoaDonDTO();
        double tongTien = 0;
        DataTable dtdsSach = new DataTable();
        CR3_XuatHoaDon report3 = new CR3_XuatHoaDon();
        KhachHangDTO kh = new KhachHangDTO();

        public LapHoaDonBanHang()
        {
            InitializeComponent();
        }

        #region Form load
        private void LapHoaDonBanHang_Load(object sender, EventArgs e)
        {
            nv = NhanVienBUS.HienThiTTCN(maNV);
            lbTenNV.Text = nv.HoTen;
            nv.MaNV = maNV;
            hd.NgayCap = Convert.ToDateTime(dtpNgayLap.Text);
            hd.MaNV = nv.MaNV;
        }
        #endregion

        #region Dong form
        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion

        #region Tao hoa don
        private void btnTaoHD_Click(object sender, EventArgs e)
        {
            if (txtMaKH.Text == "")
            {
                MessageBox.Show("Mã khách hàng chưa nhập. Yêu cầu nhập lại");
                txtMaKH.Focus();
                return;
            }
            long temp;
            if (long.TryParse(txtMaKH.Text, out temp) == false)
            {
                MessageBox.Show("Mã hóa đơn phải là số");
                txtMaKH.Text = "";
                txtMaKH.Focus();
                return;
            }

            gpThanhTien.Enabled = true;
            gpThongTinHoaDon.Enabled = true;
            btnHuy.Enabled = true;
            btnXuatHoaDon.Enabled = false;

            //Kiem tra ma khach hang co phai la so khong
            kh.MaKH = Convert.ToInt32(txtMaKH.Text);
            ///////////////////////////////////////////
            DataTable dtkh = KhachHangDAO.XemCongNoKH(kh);
            if (dtkh.Rows.Count != 0)
            {
                hd.MaKH = Convert.ToInt16(txtMaKH.Text);
                if (NhanVienBanSachBUS.ThemHoaDon(hd) == NhanVienBanSachBUSResult.OK)
                {
                    kh.TenKH = dtkh.Rows[0][1].ToString();
                    DataTable dthd = new DataTable();
                    dthd = NhanVienBanSachBUS.LayMaHD();
                    DataRow dr = dthd.Rows[dthd.Rows.Count - 1];
                    hd.MaHD = Convert.ToInt16(dr["MaHD"]);
                    cthd.MaHD = hd.MaHD;
                    MessageBox.Show("Them Hoa Don Thanh Cong");
                    btnTaoHD.Enabled = false;
                }
                else
                {
                    MessageBox.Show("Loi CSDL Khi Tao Hoa Don");
                    gpThanhTien.Enabled = false;
                    gpThongTinHoaDon.Enabled = false;
                    btnTaoHD.Enabled = false;
                    txtMaKH.Clear();
                    txtMaKH.Focus();
                }
            }
            else
            {
                MessageBox.Show("Ma Khach Hang Khong Ton Tai");
                gpThanhTien.Enabled = false;
                gpThongTinHoaDon.Enabled = false;                
                txtMaKH.Clear();
                txtMaKH.Focus();
            }

        }
        #endregion

        #region Hien thi sach len listview
        private void HienthiSach()
        {
            dtdsSach.Rows.Clear();
            dtdsSach = NhanVienBanSachBUS.LaySachTrongHoaDon(int.Parse(hd.MaHD.ToString()));
            lvCTHD.Items.Clear();
            for (int i = 0; i < dtdsSach.Rows.Count; i++)
            {
                DataRow drsach = dtdsSach.Rows[i];
                ListViewItem item = new ListViewItem();
                int temp = i + 1;
                item.Text = temp.ToString();
                item.SubItems.Add(drsach["TenSach"].ToString());
                item.SubItems.Add(drsach["SoLuong"].ToString());
                item.SubItems.Add(drsach["DonGia"].ToString());
                lvCTHD.Items.Add(item);
            }
        }
        #endregion

        #region Them chi tiet hoa don
        private void btnThem_Click(object sender, EventArgs e)
        {
            //Kiem tra du lieu nhap vao
            if (txtMaSach.Text == "" || txtSoLuong.Text == "")
            {
                MessageBox.Show("Mã sách va Số lượng không tồn tại");
                txtMaSach.Clear();
                txtSoLuong.Clear();
                txtMaSach.Focus();
                return;
            }

            long temp;
            if (long.TryParse(txtMaSach.Text, out temp) == false)
            {
                MessageBox.Show("Mã sách phải là kiểu số");
                txtMaSach.Text = "";
                txtMaSach.Focus();
                return;
            }

            int temp1;
            if (int.TryParse(txtSoLuong.Text, out temp1) == false)
            {
                MessageBox.Show("Số lượng phải là kiểu số");
                txtSoLuong.Text = "";
                txtSoLuong.Focus();
                return;
            }

            cthd.MaSach = Convert.ToInt32(txtMaSach.Text);
            cthd.SoLuong = Convert.ToInt16(txtSoLuong.Text);

            //Lay don gia cua mot cuon sach
            DataTable dtsch = new DataTable();
            dtsch = NhanVienBanSachBUS.LaySach(Convert.ToInt16(cthd.MaSach));
            if (dtsch.Rows.Count == 0)
            {
                MessageBox.Show("Mã sách không tồn tại");
                txtMaSach.Text = "";
                txtSoLuong.Text = "";
                txtMaSach.Focus();
                return;
            }

            DataRow drs = dtsch.Rows[0];
            cthd.DonGia = double.Parse(drs["Gia"].ToString());
            ///////////////////////////////////////////////////

            tongTien += cthd.DonGia * cthd.SoLuong;
            lbTongTien.Text = tongTien.ToString();

            //Lay danh sach sach trong hoa don dang tao
            if (NhanVienBanSachBUS.ThemCTHD(cthd) == NhanVienBanSachBUSResult.ERROR)
                MessageBox.Show("Sách này đã có trong hóa đơn");
            HienthiSach();
            ///////////////////////////////////////////////////
            //Them Thanh Cong
            btnXuatHoaDon.Enabled = true;
            txtMaSach.Text = "";
            txtSoLuong.Text = "";
            txtMaSach.Focus();
        }
        #endregion

        #region Xoa mot chi tiet hoa don
        private void btnXoa_Click(object sender, EventArgs e)
        {
            #region cũ
            //if (lvCTHD.Items.Count == 0)
            //{
            //    MessageBox.Show("Trong hóa đơn không có sách");
            //    txtMaSach.Clear();
            //    txtSoLuong.Clear();
            //    txtMaSach.Focus();
            //    return;
            //}
            
            //    int index = lvCTHD.FocusedItem.Index;

            //    DataRow dr = dtdsSach.Rows[index];
            //    cthd.MaSach = Convert.ToInt16(dr["MaSach"]);
            //    cthd.DonGia = Convert.ToDouble(dr["DonGia"]);
            //    cthd.SoLuong = Convert.ToInt16(dr["SoLuong"]);
            //    NhanVienBanSachBUS.XoaChiTietHD(cthd);

            //    //Tinh tong tien
            //    tongTien = tongTien - cthd.DonGia * cthd.SoLuong;
            //    lbTongTien.Text = tongTien.ToString();
            //    /////////////////////////////////////////////////////

            //    //Hien thi lai danh sach cac sach trong hoa don
            //    HienthiSach();
            
            ////else
            ////{
            ////    MessageBox.Show("Bạn Chưa Chọn CTHD cần xóa !");
            ////    return; ;
            ////}
            ///////////////////////////////////////////////////////
            //if (lvCTHD.Items.Count == 0)
            //{
            //    btnXuatHoaDon.Enabled = false;
            //}
            #endregion

            if (lvCTHD.Items.Count == 0)
            {
                MessageBox.Show("Trong hóa đơn không có sách");

                return;
            }

            int index = 0;
            try
            {
                index = lvCTHD.FocusedItem.Index;
            }
            catch
            {
                MessageBox.Show("Bạn chưa chọn sách để xóa");
                return;
            }
            DataRow dr = dtdsSach.Rows[index];
            cthd.MaSach = Convert.ToInt16(dr["s.MaSach"]);
            cthd.DonGia = Convert.ToDouble(dr["DonGia"]);
            cthd.SoLuong = Convert.ToInt16(dr["SoLuong"]);
            NhanVienBanSachBUS.XoaChiTietHD(cthd);

            //Tinh tong tien
            tongTien = tongTien - cthd.DonGia * cthd.SoLuong;
            lbTongTien.Text = tongTien.ToString();
            /////////////////////////////////////////////////////

            //Hien thi lai danh sach cac sach trong hoa don
            HienthiSach();
            /////////////////////////////////////////////////////
            if (lvCTHD.Items.Count == 0)
            {
                
                btnXuatHoaDon.Enabled = false;
            }

        }
        #endregion

        #region Huy hoa don
        private void btnHuy_Click(object sender, EventArgs e)
        {
            btnTaoHD.Enabled = true;
            NhanVienBanSachBUS.XoaAllChiTietHD(cthd);            
            if (NhanVienBanSachBUS.XoaHoaDon(hd) == NhanVienBanSachBUSResult.OK)
                MessageBox.Show("Đã xóa hóa đơn");
            lbTongTien.Text = "........";
            gpThanhTien.Enabled = false;
            gpThongTinHoaDon.Enabled = false;
            btnXuatHoaDon.Enabled = false;
            btnHuy.Enabled = false;

            lvCTHD.Items.Clear();
            txtMaKH.Clear();
            txtMaKH.Focus();
        }
        #endregion

        private void btnXuatHoaDon_Click(object sender, EventArgs e)
        {
            report3.SetParameterValue("mahd",hd.MaHD);
            report3.SetParameterValue("tenkh",kh.TenKH);
            report3.SetParameterValue("nguoilap",nv.HoTen);
            report3.SetParameterValue("ngaytao",hd.NgayCap.Date);
            report3.SetParameterValue("loaihd","Ban Hang");

            CrystalDecisions.Shared.TableLogOnInfo tli = new CrystalDecisions.Shared.TableLogOnInfo();
            foreach (CrystalDecisions.CrystalReports.Engine.Table tb in report3.Database.Tables)
            {
                tli = tb.LogOnInfo;
                tli.ConnectionInfo.ServerName = Application.StartupPath + "\\QLNhaSach.mdb";
                tb.ApplyLogOnInfo(tli);
            }

            crystalReportViewer1.ReportSource = report3;
        }
       
    }
}